#-*- coding: utf-8 -*-
#
def fatorial_iterativo(n):
	'''
	versao iterativa
	'''
	
	produto = 1
	for k in range(n, 0, -1):
		produto *= k
		pass
	return produto
	
	
print fatorial_iterativo(5)

def fatorial (n) :
	'''
	versao recursiva do calculo do fatorial
	'''
	if n == 0 :
		return 1
	else:
		return n * fatorial (n-1)	

print fatorial(5)


def fatorial_tail (n) :
	'''
	versao com tail recursion do fatorial
	'''
	def fact ( i=n , acc=1) :
		if i == 0 :
			return acc
		else:
			return fact ( i-1, acc * i )
	return fact ( )
	
print fatorial_tail(5)
